Instrumentation of computer code has been used, for many years, during development, analysis, optimization, and debugging of various types of computer programs, including operating-system code, virtual-machine code, various types of system routines and facilities, and application programs. By introducing instrumentation into computer code, various types of data can be collected from an executing system or program, including timing data, resource-utilization data, error-log data, and sequential or tree-like data representations of the code paths traversed by executing systems, programs, and routines.
Comprehensive instrumentation, unfortunately, does not well fit within many code-development paradigms. Many code-development strategies and programming-language features are directed to compartmentalizing functionality and logically organizing code into hierarchical modules, objects, and other constructs. In general, however, instrumentation and related tasks, including error logging and error handling, involve insertion of specialized functionality across objects, modules, and other such compartmentalized entities.
During the past decade, tools for facilitating code instrumentation and related tasks have been developed under the category of aspect-oriented programming (“AOP”) tools and facilities. AOP provides tools for implementing crosscutting functionalities, such as instrumentation of code for analytics and logging errors, within the object-oriented-programming paradigm and other such development strategies. Crosscutting functionalities are functionalities that cut across the various code-development strategies and paradigms, such as object-oriented programming and earlier top-down programming that seek to logically organize code into functionality-related compartments and hierarchies. While AOP has addressed many of the problems associated with implementation of crosscutting tasks and facilities, certain challenges to implementing cross-cutting functionalities remain. For this reason, designers, developers, manufacturers and vendors, and, ultimately, users of a wide variety of different types of computer-instruction-encoded control components to modern computational systems, from processor-controlled appliances and cell phones to high-end distributed computational facilities, continue to seek additional tools and strategies for implementation of crosscutting functionalities, including code instrumentation.